746. Min Cost Climbing Stairs
1. Question
You are given an integer array cost
where cost[i]
is the cost of ith step on a staircase. Once you pay the cost, you can either climb one or two steps.
You can either start from the step with index 0
, or the step with index 1
.
Return the minimum cost to reach the top of the floor.
2. Examples
Example 1:
Input: cost = [10,15,20]
Output: 15
Explanation: You will start at index 1.
- Pay 15 and climb two steps to reach the top.
The total cost is 15.
Example 2:
Input: cost = [1,100,1,1,1,100,1,1,100,1]
Output: 6
Explanation: You will start at index 0.
- Pay 1 and climb two steps to reach index 2.
- Pay 1 and climb two steps to reach index 4.
- Pay 1 and climb two steps to reach index 6.
- Pay 1 and climb one step to reach index 7.
- Pay 1 and climb two steps to reach index 9.
- Pay 1 and climb one step to reach the top.
The total cost is 6.
3. Constraints
2 <= cost.length <= 1000
0 <= cost[i] <= 999
4. References
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
5. Solutions
5.1. dp
数组实现
class Solution {
public int minCostClimbingStairs(int[] cost) {
int prev = 0;
int curr = 0;
int next = 0;
for (int i = 2; i <= cost.length; i++) {
next = Math.min(curr + cost[i - 1], prev + cost[i - 2]);
prev = curr;
curr = next;
}
return next;
}
}
5.2. dp算法的优化
滑动数组实现
class Solution {
public int minCostClimbingStairs(int[] cost) {
int prev = 0;
int curr = 0;
int next = 0;
for (int i = 2; i <= cost.length; i++) {
next = Math.min(curr + cost[i - 1], prev + cost[i - 2]);
prev = curr;
curr = next;
}
return next;
}
}